package com.ecommerce.order.dto;

import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 创建订单请求DTO
 */
@Data
public class OrderCreateRequest implements Serializable {

    /**
     * 收货人姓名
     */
    @NotBlank(message = "收货人姓名不能为空")
    private String receiverName;

    /**
     * 收货人手机号
     */
    @NotBlank(message = "收货人手机号不能为空")
    private String receiverPhone;

    /**
     * 收货地址
     */
    @NotBlank(message = "收货地址不能为空")
    private String receiverAddress;

    /**
     * 备注
     */
    private String remark;

    /**
     * 订单项列表
     */
    @NotNull(message = "订单项列表不能为空")
    private List<OrderItemCreateRequest> items;

    /**
     * 用户ID（可选，用于匿名用户或测试）
     */
    private Long userId;

    /**
     * 订单项创建请求DTO
     */
    @Data
    public static class OrderItemCreateRequest {

        /**
         * 产品ID
         */
        @NotNull(message = "产品ID不能为空")
        private Long productId;

        /**
         * 购买数量
         */
        @NotNull(message = "购买数量不能为空")
        @Positive(message = "购买数量必须大于0")
        private Integer quantity;
        
        /**
         * 产品价格
         */
        @NotNull(message = "产品价格不能为空")
        @DecimalMin(value = "0.01", message = "产品价格必须大于0")
        private BigDecimal price;
        
        /**
         * 序列化版本UID
         */
        private static final long serialVersionUID = 1L;
    }
    
    /**
     * 序列化版本UID
     */
    private static final long serialVersionUID = 1L;
}